﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using CROSLAND.BL.BE;
using CROSLAND.BL.BC;
using System.Collections.Generic;

namespace CROSLAND.WebApp
{
    public partial class BuscaDoc : System.Web.UI.Page
    {
        private List<PedidoBE> _lstPedidos;

        private List<GenericBE> getGenericBE(ClienteWS.GenericBE[] p)
        {
            List<GenericBE> g = new List<GenericBE>();
            try
            {
                foreach (ClienteWS.GenericBE i in p)
                {
                    GenericBE n = new GenericBE();
                    n.Codigo = i.Codigo;
                    n.Descripcion = i.Descripcion;
                    g.Add(n);
                }

            }
            catch
            {
                g = null;
            }


            return g;
        }

        private List<GenericBE> getGenericBE(ParametroWS.GenericBE[] p)
        {
            List<GenericBE> g = new List<GenericBE>();
            try
            {
                GenericBE n0 = new GenericBE();
                n0.Codigo = "0";
                n0.Descripcion = "";
                g.Add(n0);
                foreach (ParametroWS.GenericBE i in p)
                {
                    GenericBE n = new GenericBE();
                    n.Codigo = i.Codigo;
                    n.Descripcion = i.Descripcion;
                    g.Add(n);
                }
            }
            catch
            {
                g = null;
            }
            return g;
        }

        private void cargaCombos()
        {
            GenericBE blanco = new GenericBE();
            UsuarioWebBE objUsuarioWeb = (UsuarioWebBE)Session["UsuarioWeb"];

            List<GenericBE> lstAlmacen = new List<GenericBE>();
            List<GenericBE> lstOficinas = new List<GenericBE>();
            List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            List<GenericBE> lstGrupoVendedores = new List<GenericBE>();
            List<GenericBE> lstSectores = new List<GenericBE>();
            List<GenericBE> lstMotivos = new List<GenericBE>();
            List<GenericBE> lstGrupoCond = new List<GenericBE>();
            List<GenericBE> lstBloqueoEntrega = new List<GenericBE>();
            List<GenericBE> lstBloqueoFactura = new List<GenericBE>();
            List<GenericBE> lstVendedores = new List<GenericBE>();
            List<GenericBE> lstCodigoPostal = new List<GenericBE>();
            List<GenericBE> lstTipoVisita = new List<GenericBE>();
            List<GenericBE> lstAsesores = new List<GenericBE>();

            List<GenericBE> lstCanalDistribucion = new List<GenericBE>();
            List<GenericBE> listaOrgVtas = new List<GenericBE>();
            List<GenericBE> listaOficina = new List<GenericBE>();
            List<GenericBE> lstCondicionPago = new List<GenericBE>();
            List<GenericBE> lstCondExp = new List<GenericBE>();
            List<GenericBE> lstMotRec = new List<GenericBE>();
            List<GenericBE> lstZonaReg = new List<GenericBE>();
            List<GenericBE> lstGrupoCli = new List<GenericBE>();
            List<GenericBE> lstCampaña = new List<GenericBE>();
            List<GenericBE> lstCity = new List<GenericBE>();
            List<GenericBE> lstColor = new List<GenericBE>();
            List<GenericBE> lstDispo = new List<GenericBE>();
            List<GenericBE> lstGrpArt = new List<GenericBE>();
            List<GenericBE> lstZReg = new List<GenericBE>();
            List<UbigeoBE> lstUbigeos = new List<UbigeoBE>();
            List<GenericBE> lstBancoCheque = new List<GenericBE>(); 
            List<GenericBE> ltsBancoDepo = new List<GenericBE>(); 
            List<GenericBE>  lstProcesadora = new List<GenericBE>();
            List<GenericBE> _lvLstPrioridadEnt = new List<GenericBE>();
            List<LibrosxvstelBE> lstLibrosxvstel = new List<LibrosxvstelBE>();
            decimal pIGV;
            if (Session["CargarCombos"] == null)
            {
                DateTime fechaHasta = new DateTime();
                ParametroBC.Instance.getDataDDL(ref lstAlmacen, ref lstAsesores, ref lstBloqueoEntrega,
                    ref lstBloqueoFactura, ref lstCanalDistribucion, ref lstCondExp, ref lstCondicionPago,
                    ref lstGrupoCond, ref lstGrupoVendedores, ref lstMotivos, ref lstOficinas, ref listaOrgVtas, ref lstSectores,
                    ref lstTipoDocumento, out fechaHasta, ref lstMotRec, ref lstZonaReg, ref lstGrupoCli, ref lstUbigeos, ref lstCampaña, 
                    ref lstCity, ref lstColor, ref lstDispo, ref lstGrpArt, ref lstZReg,
                    ref lstBancoCheque, ref ltsBancoDepo, ref lstProcesadora, ref lstLibrosxvstel, out pIGV);

                Session["fechaHasta"] = fechaHasta;
                blanco = new GenericBE();
                blanco.Codigo = "";
                blanco.Descripcion = "[Todos]";
                lstOficinas.Add(blanco);
                Dictionary<string, List<GenericBE>> lstCombos = new Dictionary<string, List<GenericBE>>();
                lstCombos.Add("codigoPostal", lstCodigoPostal);
                lstCombos.Add("vendedores", lstVendedores);
                lstCombos.Add("bloqueoEntrega", lstBloqueoEntrega);
                lstCombos.Add("bloqueoFactura", lstBloqueoFactura);
                lstCombos.Add("prioridadEnt", _lvLstPrioridadEnt);
                lstCombos.Add("grupoCond", lstGrupoCond);
                lstCombos.Add("grupoVendedores", lstGrupoVendedores);
                lstCombos.Add("motivos", lstMotivos);
                lstCombos.Add("oficinas", lstOficinas);
                lstCombos.Add("sectores", lstSectores);
                UsuarioWebBE uw = new UsuarioWebBE();
                uw = (UsuarioWebBE)Session["UsuarioWeb"];
                uw.IGV = pIGV;
                if (uw.sector == "00")
                {
                    GenericBE itm = lstTipoDocumento.Find(X => X.Codigo == ParametroBC.Instance.getParamValue("CotVMS"));
                    lstTipoDocumento.Remove(itm);
                }
                else
                {
                    for (int i = lstTipoDocumento.Count - 1; i >= 0; i--)
                    {
                        if (lstTipoDocumento[i].Codigo != ParametroBC.Instance.getParamValue("CotVMS"))
                        {
                            lstTipoDocumento.Remove(lstTipoDocumento[i]);
                        }
                    }
                }
                lstCombos.Add("tipoDocumento", lstTipoDocumento);
                lstCombos.Add("tipoVisita", lstTipoVisita);
                lstCombos.Add("motivoRechazo", lstMotRec);
                lstCombos.Add("zonaregistral", lstZReg);
                lstCombos.Add("grupocliente", lstGrupoCli);
                Session["CargarCombos"] = lstCombos;
                Session["Ubigeos"] = lstUbigeos;
            }

            //LLAMADO AL SERVICIO WEB
            //List<GenericBE> lstTipoDocumento = new List<GenericBE>();
            //ParametroWS.ParametroWS p = new DECOR.WebApp.ParametroWS.ParametroWS();
            //ParametroWS.DataDDLBE dataDDLBE = p.getDataDDL();
            //lstTipoDocumento = getGenericBE(dataDDLBE.LstTipoDoc);   

            //ClienteWS.ClienteWS canalDist = new DECOR.WebApp.ClienteWS.ClienteWS();
            //List<GenericBE> lst = getGenericBE(canalDist.listaCanalDist());

            Dictionary<string, List<GenericBE>> dict = (Dictionary<string, List<GenericBE>>)Session["CargarCombos"];
            if (dict["tipoDocumento"][0].Codigo != " ")
            {
                blanco = new GenericBE();
                blanco.Codigo = " ";
                blanco.Descripcion = " ";
                dict["tipoDocumento"].Insert(0, blanco);
            }
            
            //cmbClaseDocumento.DataValueField = "Codigo";
            //cmbClaseDocumento.DataTextField = "Descripcion";
            //cmbClaseDocumento.DataSource = dict["tipoDocumento"].ToList();// lstTipoDocumento;
            //cmbClaseDocumento.DataBind();
                        

            //RGF 20111011
            string[] tiposDato = ParametroBC.Instance.getParamValue("TipoDato").Split(',');
            string[] tipo;
            ListItem li;
            cmbTipoDato.Items.Clear();
            for (int i = 0; i < tiposDato.Length; i++)
            {
                tipo = tiposDato[i].Split('-');
                li = new ListItem();
                li.Value = tipo[0];
                li.Text = tipo[1];
                cmbTipoDato.Items.Add(li);
            }

            //string[] cmbListaPed = ParametroBC.Instance.getParamValue("cmbListaPed").Split(',');
            //string[] lista;
            //ListItem lis;
            //cmbClaseDocumento.Items.Clear();
            //for (int i = 0; i < cmbListaPed.Length; i++)
            //{
            //    lista = cmbListaPed[i].Split('-');
            //    lis = new ListItem();
            //    lis.Value = lista[0];
            //    lis.Text = lista[1];
            //    cmbClaseDocumento.Items.Add(lis);
            //}
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    if (string.IsNullOrEmpty(txtFechaInicio.Text))
                    {
                        txtFechaInicio.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    }
                    if (string.IsNullOrEmpty(txtFechaFin.Text))
                    {
                        txtFechaFin.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    }
                    this.cargaCombos();
                    PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];
                   
                    //this.buscarPedidos();
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private void buscarPedidos()
        {
            //PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];
            //if (objPersona != null)
            //{
                DateTime fecIni = Convert.ToDateTime(txtFechaInicio.Text);
                DateTime fecFin = Convert.ToDateTime(txtFechaFin.Text);
                
                
                //RGF 20111011
                string numDoc = "";
                string refLegal = "";
                string nombreCliente = "";
                string NIF = "";
                string codCliente = "";
                string nombreMaterial = "";
                string tipoDoc = "";

                if (txtDatoBusq.Text.Trim().Length > 0)
                {
                    switch (cmbTipoDato.SelectedValue)
                    {
                        case "1":
                            numDoc = txtDatoBusq.Text;
                            break;
                        case "2":
                            refLegal = txtDatoBusq.Text;
                            break;
                        case "3":
                            nombreCliente = txtDatoBusq.Text;
                            break;
                        case "4":
                            NIF = txtDatoBusq.Text;
                            break;
                        case "5":
                            codCliente = txtDatoBusq.Text;
                            break;
                        case "6":
                            nombreMaterial = txtDatoBusq.Text;
                            break;
                    }
                }

                UsuarioWebBE uWeb = new UsuarioWebBE();
                uWeb = (UsuarioWebBE)HttpContext.Current.Session["UsuarioWeb"];
                tipoDoc = "P";

                _lstPedidos = PedidoBC.Instance.ListaPedidoVMS(numDoc, txtLote.Text, fecIni, fecFin, uWeb.PerNr, uWeb.OrgVentas,
                                                                  uWeb.CanalDist, uWeb.OfVentas, refLegal,
                                                                  txtMaterial.Text, nombreCliente, NIF, codCliente, nombreMaterial, tipoDoc);
                //--- todos los tipos de documento 
                if (cmbClaseDocumento.SelectedIndex > 0)
                {
                    this._lstPedidos.RemoveAll(X => X.CodTipoDoc!=cmbClaseDocumento.SelectedValue);
                }

                //RGF 20111012
                Session["lstPedidos"] = _lstPedidos;
                gvPedidos.PageIndex = 0;
                CargarGrilla();               

                if (this._lstPedidos.Count == 0)
                {
                    Session["Mensaje"] = "No se encontró información para los parámetros seleccionados.";
                }
            //}
            //else
            //{
            //    Response.Redirect("Login.aspx");
            //}
        }

        //RGF 20111012
        private void CargarGrilla()
        {
            _lstPedidos = (List<PedidoBE>)Session["lstPedidos"];
            gvPedidos.DataSource = _lstPedidos;
            gvPedidos.DataBind();
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.buscarPedidos();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void gvPedidos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Detalle")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvPedidos.Rows[index];
                GridView gvTmp = (GridView)row.FindControl("gvDetalle");
                gvTmp.Visible = !gvTmp.Visible;

            }
            if (e.CommandName == "Flujo")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvPedidos.Rows[index];
                string numPedido = ((Label)row.FindControl("lblNumPedido")).Text;
                if (numPedido.Equals(string.Empty) || numPedido.Equals("0000000000"))
                {
                    Session["Mensaje"] = "Número de documento inválido.";
                }
                else
                {
                    string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + numPedido + "',null,'width=850,height=500,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "SEGUIMIENTO", str, false);
                }
            }
            if (e.CommandName == "Rechazo")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvPedidos.Rows[index];
                GridView gvTmp = (GridView)row.FindControl("gvDetalle");
                List<string> lstLote = new List<string>();
                DateTime fF = new DateTime();
                DateTime fI = new DateTime();

                if (gvTmp.Rows.Count > 0)
                {
                    foreach (GridViewRow fila in gvTmp.Rows)
                    {
                        string lote = fila.Cells[3].Text;
                        lstLote.Add(lote);
                    }
                    string rpta = string.Empty;
                    try
                    {
                        List<string> respuesta = PedidoBC.Instance.RechazarPedido(fI, fF, "", "", "", "", lstLote);
                        foreach (string s in respuesta)
                        {
                            if (respuesta.Count() > 1)
                            {
                                rpta = "- " + s + "<br/>" + rpta;
                            }
                            else
                            {
                                rpta = s;
                            }
                        }
                        Session["Mensaje"] = rpta;
                        ((Site)Master).muestraMensajes();
                    }
                    catch
                    {
                        rpta = "No se ejecutó la acción";
                        Session["Mensaje"] = rpta;
                        ((Site)Master).muestraMensajes();
                    }
                }
            }
        }

        //RGF 20111012
        protected void gvPedidos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                gvPedidos.PageIndex = e.NewPageIndex;
                CargarGrilla();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
        }

        protected void gvPedidos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            { 
                ImageButton img = (ImageButton)e.Row.FindControl("btnRechazo");
                if(img!=null)
                {
                    img.Attributes.Add("onclick","return confirm('¿Desea rechazar el pedido?');");
                }

            }
        }
    }
}
